package com.wjsh.common.base;

import android.app.Application;
import android.content.Context;

import com.wjsh.common.base.delegate.AppDelegate;
import com.wjsh.common.di.component.AppComponent;

/**
 * Created by chenbaolin on 2017/8/10.
 */

public class BaseApplication extends Application implements App {
    private AppDelegate mAppDelegate;

    /**
     * 这里会在 {@link BaseApplication#onCreate} 之前被调用,可以做一些较早的初始化
     * 常用于 MultiDex 以及插件化框架的初始化
     *
     * @param context
     */
    @Override
    public void attachBaseContext(Context context) {
        super.attachBaseContext(context);
        this.mAppDelegate = new AppDelegate(context);
        this.mAppDelegate.attachBaseContext(context);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        this.mAppDelegate.onCreate(this);
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
        if (mAppDelegate != null) {
            this.mAppDelegate.onTerminate(this);
        }
    }

    /**
     * 将AppComponent返回出去,供其它地方使用, AppComponent接口中声明的方法返回的实例,在getAppComponent()拿到对象后都可以直接使用
     *
     * @return
     */
    @Override
    public AppComponent getAppComponent() {
        return mAppDelegate.getAppComponent();
    }
}
